Computing devices such as desktop computers, laptop computers, cell phones, smartphones, personal digital assistants (PDA), and many other electronic devices are widely deployed. The primary element of such computing devices is a central processing unit (CPU), or a processor, which is responsible for executing instructions of one or more computer programs. The CPU executes each program instruction in sequence to perform the basic arithmetical, logical, and input/output operations of the computing device. Design and implementation of such devices in general, and CPUs in particular, may vary; however, their fundamental functionalities remain very similar.
Traditionally, in a computing device, the CPU is coupled to a memory and an Input/Output (I/O) subsystem, directly or through a bus, to perform the main functions of computing devices such as inputting and outputting data, processing data, and so forth. The memory may embed an operating system (OS), computer programs, applications, and so forth.
Conventional operating systems are quite similar in architecture, in that each tends to have conventional file and memory operations, storage and graphical user interface operations, and so forth. Architectures of conventional operating systems include a layered design, device drivers, and Application Programming Interfaces (APIs).
In conventional operating systems, a core kernel essentially has master control over all the operations of the overlying software, components, device drivers, applications, and so forth. Traditionally, operating systems implement ‘multi-tasking’ through time slicing and sequential allocation of computer resources to various threads and processes. A thread generally runs within a process and shares resources, e.g., memory, with other threads within the same process, whereas a process generally runs ‘self-contained’ within its own right and completely independently of any other process. In multi-tasking, when a computing device includes a single processor, the operating system instructs the processor to switch between different threads and implement them sequentially. Switching generally happens frequently enough that the user may perceive the threads (or tasks) as running simultaneously.
Many conventional computing devices utilize multiprocessors, or multicore processors, which may truly allocate multiple threads or tasks to run at the same time on different cores. However, conventional multicore processor architectures involve a small number of cores (typically 2, 4, 6, or 8 cores) due to the design limitations of traditional hardware and traditional operating systems. In the case of a conventional multicore processor, the computing device still must implement time slicing and switching between different threads on each of its cores when performing several tasks involving multithreading allocated through the cores. In other words, even conventional multicore processors cannot implement true multitasking.
Traditional processor architectures are also known to experience hanging, cycling, or crashing of the threads when applications are poorly written or purposely malicious. In many instances, a thread crash may bring the whole processor down and result in time-division multiplexing of various threads or processes.
Conventional processor designs use a fixed-frequency, continuously running crystal as the timing mechanism for clocking through microprocessor execution cycles. Thus, the crystal and the processor may continue running even if nothing is being accomplished in the computing device, uselessly cycling around and waiting for a process to actually perform an action. This timing paradigm results in wasted energy. First, the crystal and processor transistors typically execute at their maximum speed at all times, thereby consuming excess power and generating excess heat. Secondly, it is inefficient to continue running clock cycles if no substantive process is actually running. However, these inefficiencies are unavoidable in the conventional operating system design.
Furthermore, conventional operating systems require various modifications and enhancements each year, such as incorporation of new communications layers for Ethernet drivers, Transmission Control Protocol/Internet Protocol (TCP/IP) stacks, Web browsers, and the like. Generally, these new layers are added on top of the conventional operating system, thereby increasing complexity, decreasing performance, and often leading to software crashes and security flaws.